﻿// 3688. 集合交并.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <unordered_map>


using  namespace std;

/*
https://www.acwing.com/problem/content/3691/

输入两个集合，分别求其交集和并集中元素的个数，每个集合中可能存在相同的元素，而最终的交集和并集中应该不存在。

输入格式
第一行输入两个整数 n,m表示两个集合中元素的个数。

第二行输入 n个整数，表示第一个集合中的元素。

第三行输入 m 个整数，表示第二个集合中的元素。

输出格式
输出两个整数以空格分开，表示其交集和并集中元素的个数。

数据范围
1≤n,m≤105
,
给定集合元素取值范围 [1,109]。

输入样例：
4 5
3 4 7 3
4 6 3 2 6
输出样例：
2 5
*/



const int N = 100010;
int a[N], b[N];
int n, m;
unordered_map<int, int> mma;
unordered_map<int, int > mmb;


int main()
{
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
		mma[a[i]]++;
	}
	for (int i = 0; i < m; i++) {
		cin >> b[i];
		mmb[b[i]]++;
	}

	int ans = 0;
	for (auto& e : mma) {
		int v = e.first;
		if (mmb.count(v)) {
			ans++;
		}
	}

	cout << ans << " " << mma.size() + mmb.size() - ans << endl;

}
 